package tedu.api.collection;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * JDK1.8之后推出了一个新特性：Lambda表达式
 * 作用：可以用更简洁的代码实现匿名内部类
 * 规则：
 * 1)不是任何匿名内部类都可以转换为Lambda表达式
 * 2)Lambda表达式对接口的要求：之能事函数式接口
 * 3)函数式接口：接口中要求实现类必须重写的方法只有一个
 *
 */
public class LambdaDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();

        //匿名内部类写法
        Collections.sort(list, new Comparator<String>() {
            public int compare(String o1, String o2) {
                return o1.length()-o2.length();
            }
        });

        //Lambda表达式写法
        //删除new到方法名，在参数列表和{之间补充->,注：要删除一个多余}
        Collections.sort(list,(String o1, String o2)-> {
                return o1.length()-o2.length();
        });

        //Lambda表达式写法
        //删除参数类型，只保留形参名称
        //若：参数只有一个，可以连()一并删除
        Collections.sort(list,(o1, o2)-> {
            return o1.length()-o2.length();
        });

        //Lambda表达式写法
        //若：方法体中只有一句代码，方法体的{}可以不写，如果这句话中有return,也要一起舍弃
        Collections.sort(list,(o1, o2)-> o1.length()-o2.length() );



        Collections.sort(list,(o1,o2)->o1.length()-o2.length());
    }
}

















